🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / node / src / commonMain / kotlin / org / meshtastic / feature / node / list / NodeListViewModel.kt
Displaying Raw • Download
feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/list/NodeListViewModel.kt 520fa717a938fd84682403b41f57d9f7e1ef49ef (520fa717) Text, 6.78 KB
T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.node.list
Tff7b72import T7ee787androidx.lifecycle.SavedStateHandle
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787androidx.lifecycle.viewModelScope
Tff7b72import T7ee787kotlinx.coroutines.flow.Flow
Tff7b72import T7ee787kotlinx.coroutines.flow.StateFlow
Tff7b72import T7ee787kotlinx.coroutines.flow.combine
Tff7b72import T7ee787kotlinx.coroutines.flow.flatMapLatest
Tff7b72import T7ee787kotlinx.coroutines.launch
Tff7b72import T7ee787org.koin.core.annotation.KoinViewModel
Tff7b72import T7ee787org.meshtastic.core.model.Node
Tff7b72import T7ee787org.meshtastic.core.model.NodeSortOption
Tff7b72import T7ee787org.meshtastic.core.model.RadioController
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioConfigRepository
Tff7b72import T7ee787org.meshtastic.core.repository.ServiceRepository
Tff7b72import T7ee787org.meshtastic.core.ui.viewmodel.stateInWhileSubscribed
Tff7b72import T7ee787org.meshtastic.feature.node.detail.NodeManagementActions
Tff7b72import T7ee787org.meshtastic.feature.node.domain.usecase.GetFilteredNodesUseCase
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tff7b72import T7ee787org.meshtastic.proto.Config
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongParameterListTa5d6ff"Tb4b4b4)
Tf0883e@KoinViewModel
Tff7b72class T56d364NodeListViewModelTb4b4b4(
Tff7b72private Tff7b72val Te6edf3savedStateHandleTb4b4b4: Te6edf3SavedStateHandleTb4b4b4,
Tff7b72private Tff7b72val Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioConfigRepositoryTb4b4b4: Te6edf3RadioConfigRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3serviceRepositoryTb4b4b4: Te6edf3ServiceRepositoryTb4b4b4,
Tff7b72private Tff7b72val Te6edf3radioControllerTb4b4b4: Te6edf3RadioControllerTb4b4b4,
Tff7b72val Te6edf3nodeManagementActionsTb4b4b4: Te6edf3NodeManagementActionsTb4b4b4,
Tff7b72private Tff7b72val Te6edf3getFilteredNodesUseCaseTb4b4b4: Te6edf3GetFilteredNodesUseCaseTb4b4b4,
Tff7b72val Te6edf3nodeFilterPreferencesTb4b4b4: Te6edf3NodeFilterPreferencesTb4b4b4,
Tb4b4b4) Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3ourNodeInfoTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3Node?Tff7b72> Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3ourNodeInfo
Tff7b72val Te6edf3onlineNodeCount Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3onlineNodeCountTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3totalNodeCount Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3totalNodeCountTb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3connectionState Tff7b72= Te6edf3serviceRepositoryTb4b4b4.Te6edf3connectionState
Tff7b72private Tff7b72val Te6edf3nodeSortOption Tff7b72= Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3nodeSortOption
Tff7b72private Tff7b72val Te6edf3_nodeFilterText Tff7b72= Te6edf3savedStateHandleTb4b4b4.Te6edf3getStateFlowTb4b4b4(Te6edf3KEY_FILTER_TEXTTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3filterToggles Tff7b72=
Te6edf3combineTb4b4b4(
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3includeUnknownTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3onlyOnlineTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3onlyDirectTb4b4b4,
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3showIgnoredTb4b4b4,
Tb4b4b4) Tb4b4b4{ Te6edf3includeUnknownTb4b4b4, Te6edf3excludeInfrastructureTb4b4b4, Te6edf3onlyOnlineTb4b4b4, Te6edf3onlyDirectTb4b4b4, Te6edf3showIgnored Tff7b72-Tff7b72>
Te6edf3NodeFilterTogglesTb4b4b4(
Te6edf3includeUnknown Tff7b72= Te6edf3includeUnknownTb4b4b4,
Te6edf3excludeInfrastructure Tff7b72= Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3onlyOnline Tff7b72= Te6edf3onlyOnlineTb4b4b4,
Te6edf3onlyDirect Tff7b72= Te6edf3onlyDirectTb4b4b4,
Te6edf3showIgnored Tff7b72= Te6edf3showIgnoredTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72val Te6edf3nodeFilterTb4b4b4: Te6edf3FlowTff7b72<Te6edf3NodeFilterStateTff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3_nodeFilterTextTb4b4b4, Te6edf3filterTogglesTb4b4b4, Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3excludeMqttTb4b4b4) Tb4b4b4{
Te6edf3filterTextTb4b4b4,
Te6edf3filterTogglesTb4b4b4,
Te6edf3excludeMqttTb4b4b4,
Tff7b72-Tff7b72>
Te6edf3NodeFilterStateTb4b4b4(
Te6edf3filterText Tff7b72= Te6edf3filterTextTb4b4b4,
Te6edf3includeUnknown Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3includeUnknownTb4b4b4,
Te6edf3excludeInfrastructure Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3excludeInfrastructureTb4b4b4,
Te6edf3onlyOnline Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3onlyOnlineTb4b4b4,
Te6edf3onlyDirect Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3onlyDirectTb4b4b4,
Te6edf3showIgnored Tff7b72= Te6edf3filterTogglesTb4b4b4.Te6edf3showIgnoredTb4b4b4,
Te6edf3excludeMqtt Tff7b72= Te6edf3excludeMqttTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3nodesUiStateTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3NodesUiStateTff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3nodeSortOptionTb4b4b4, Te6edf3nodeFilterTb4b4b4, Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3deviceProfileFlowTb4b4b4) Tb4b4b4{ Te6edf3sortTb4b4b4, Te6edf3nodeFilterTb4b4b4, Te6edf3profile Tff7b72-Tff7b72>
Te6edf3NodesUiStateTb4b4b4(
Te6edf3sort Tff7b72= Te6edf3sortTb4b4b4,
Te6edf3filter Tff7b72= Te6edf3nodeFilterTb4b4b4,
Te6edf3distanceUnits Tff7b72= Te6edf3profileTb4b4b4.Te6edf3configTff7b72?.Te6edf3displayTff7b72?.Te6edf3unitsTff7b72?.Te6edf3value Tff7b72?: T79c0ff0Tb4b4b4,
Te6edf3tempInFahrenheit Tff7b72= Te6edf3profileTb4b4b4.Te6edf3module_configTff7b72?.Te6edf3telemetryTff7b72?.Te6edf3environment_display_fahrenheit Tff7b72?: Tff7b72falseTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3NodesUiStateTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3nodeListTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeTff7b72>Tff7b72> Tff7b72=
Te6edf3combineTb4b4b4(Te6edf3nodeFilterTb4b4b4, Te6edf3nodeSortOptionTb4b4b4, Tff7b72::Te6edf3PairTb4b4b4)
Tb4b4b4.Te6edf3flatMapLatest Tb4b4b4{ Tb4b4b4(Te6edf3filterTb4b4b4, Te6edf3sortTb4b4b4) Tff7b72-Tff7b72> Te6edf3getFilteredNodesUseCaseTb4b4b4.Te6edf3invokeTb4b4b4(Te6edf3filterTb4b4b4, Te6edf3sortTb4b4b4) Tb4b4b4}
Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3unfilteredNodeListTb4b4b4: Te6edf3StateFlowTff7b72<Te6edf3ListTff7b72<Te6edf3NodeTff7b72>Tff7b72> Tff7b72=
Te6edf3nodeRepositoryTb4b4b4.Te6edf3getNodesTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3stateInWhileSubscribedTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72var Te6edf3nodeFilterTextTb4b4b4: Tffa657String
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3_nodeFilterTextTb4b4b4.Te6edf3value
Tff7b72setTb4b4b4(Te6edf3valueTb4b4b4) Tb4b4b4{
Te6edf3savedStateHandleTff7b72[Te6edf3KEY_FILTER_TEXTTff7b72] Tff7b72= Te6edf3value
Tb4b4b4}
Tff7b72fun Td2a8ffsetSortOptionTb4b4b4(Te6edf3sortTb4b4b4: Te6edf3NodeSortOptionTb4b4b4) Tb4b4b4{
Te6edf3nodeFilterPreferencesTb4b4b4.Te6edf3setNodeSortTb4b4b4(Te6edf3sortTb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffsetChannelsTb4b4b4(Te6edf3channelSetTb4b4b4: Te6edf3ChannelSetTb4b4b4) Tff7b72= Te6edf3viewModelScopeTb4b4b4.Te6edf3launch Tb4b4b4{
Te6edf3radioConfigRepositoryTb4b4b4.Te6edf3replaceAllSettingsTb4b4b4(Te6edf3channelSetTb4b4b4.Te6edf3settingsTb4b4b4)
Tff7b72val Te6edf3newLoraConfig Tff7b72= Te6edf3channelSetTb4b4b4.Te6edf3lora_config
Tff7b72if Tb4b4b4(Te6edf3newLoraConfig Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3radioControllerTb4b4b4.Te6edf3setLocalConfigTb4b4b4(Te6edf3ConfigTb4b4b4(Te6edf3lora Tff7b72= Te6edf3newLoraConfigTb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Td2a8fffavoriteNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestFavoriteNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffignoreNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestIgnoreNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffmuteNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestMuteNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72fun Td2a8ffremoveNodeTb4b4b4(Te6edf3nodeTb4b4b4: Te6edf3NodeTb4b4b4) Tff7b72= Te6edf3nodeManagementActionsTb4b4b4.Te6edf3requestRemoveNodeTb4b4b4(Te6edf3viewModelScopeTb4b4b4, Te6edf3nodeTb4b4b4)
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3KEY_FILTER_TEXT Tff7b72= Ta5d6ff"Ta5d6fffilter_textTa5d6ff"
Tb4b4b4}
Tb4b4b4}
Tff7b72data Tff7b72class T56d364NodesUiStateTb4b4b4(
Tff7b72val Te6edf3sortTb4b4b4: Te6edf3NodeSortOption Tff7b72= Te6edf3NodeSortOptionTb4b4b4.Te6edf3LAST_HEARDTb4b4b4,
Tff7b72val Te6edf3filterTb4b4b4: Te6edf3NodeFilterState Tff7b72= Te6edf3NodeFilterStateTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3distanceUnitsTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tff7b72val Te6edf3tempInFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeFilterStateTb4b4b4(
Tff7b72val Te6edf3filterTextTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3includeUnknownTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeInfrastructureTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyDirectTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeFilterTogglesTb4b4b4(
Tff7b72val Te6edf3includeUnknownTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3excludeInfrastructureTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyOnlineTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3onlyDirectTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3showIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4)
Served by rngit 1.5.0 - Generated in 0.12s